package source

import "context"

type Option func(cfg *Config)

func newDefault() *Config {
	return &Config{
		Filepath:  "",
		EnvPrefix: "",
		Context:   context.Background(),
	}
}

func WithCfgFile(filepath string) Option {
	return func(cfg *Config) {
		cfg.Filepath = filepath
	}
}

func WithEnvPrefix(prefix string) Option {
	return func(cfg *Config) {
		cfg.EnvPrefix = prefix
	}
}

func WithApollo(apollo *Apollo) Option {
	return func(cfg *Config) {
		cfg.Apollo = apollo
	}
}

func WithContext(ctx context.Context) Option {
	return func(cfg *Config) {
		cfg.Context = ctx
	}
}

type Config struct {
	Context   context.Context
	Filepath  string  `json:"filepath"`
	EnvPrefix string  `json:"envPrefix"`
	Apollo    *Apollo `json:"apollo"` // 阿波罗配置
}

// 阿波罗配置
type Apollo struct {
	AppID         string `json:"appId"`
	Cluster       string `json:"cluster"`
	NamespaceName string `json:"namespaceName"`
	IP            string `json:"ip"`
	AccessKey     string `json:"access"`
	SecretKey     string `json:"secret"`
}
